﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller; // Brug vores class library "Controller"
using Interfaces; // Brug vores class library "Interfaces"

namespace Sorts_F1
{
    public partial class FrmRedigerMedlem : Form
    {
        // Attributter
        ClsSystemController systemController;
        List<IClsPostBy> tempPostListe;

        public FrmRedigerMedlem(ClsSystemController systemController) // modtager controlleren fra start formen
        {
            InitializeComponent();
            this.systemController = systemController; // Istedet for at instansiere en ny controller bruger vi den der bliver sendt med
            this.MinimumSize = this.MaximumSize = this.Size; // Sørg for at formen altid er den nuværende størrelse
        }

        private void FrmRedigerMedlem_Load(object sender, EventArgs e)
        {
            MidlertidigPostBy(); // Bruger metoden der opretter en liste af PostBy interfaceobjekter, der indeholder alle bynavne og postnumre i databasen

            OpdaterFormen();// Opdaterer formen når den loades
        }

        // Når et medlem vælges i comboboxen skal dette medlems info vises
        private void CbMedlemmer_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (var item in systemController.VisMedlemmer())
            {
                if (item.MedlemsNummer != 0) // Kun for medlemmer der ikker er admin (medlemsnummer 0)
                {
                    if (item.MedlemsNummer == long.Parse(CbMedlemmer.Text))
                    {
                        txtNavn.Text = item.Navn;
                        txtAdresse.Text = item.Adresse;
                        txtEMail.Text = item.Mail;
                        txtBy.Text = item.By;
                        txtPostNr.Text = item.PostNummer.ToString();
                    }
                }
            }

        }

        // Opretter en liste af PostBy interfaceobjekter, der indeholder alle bynavne og postnumre i databasen
        public void MidlertidigPostBy()
        {
            tempPostListe = new List<IClsPostBy>();

            foreach (var item in systemController.VisPostBy())
            {
                tempPostListe.Add(item);
            }
        }

        private void btnBekraeftAEndringer_Click(object sender, EventArgs e)
        {
            try
            {
                long CbMed = long.Parse(CbMedlemmer.Text);
                string navn = txtNavn.Text;
                string adresse = txtAdresse.Text;
                int postNr = int.Parse(txtPostNr.Text);
                string eMail = txtEMail.Text;
                string by = txtBy.Text;
                bool checkBetaling = false;

                if (rbJa.Checked == true)
                {
                    checkBetaling = true;
                }

                //Variable, bliver brugt til at holde styr på om postnummeret ligger på databasen i forvejen.
                bool controll = false;

                // løber listen med postnumre igennem og ændre variablens tilstand, hvis postnummeret eksisterer. 
                foreach (var item in tempPostListe)
                {
                    if (item.Postnr == postNr)
                    {
                        controll = true;
                    }
                }

                //Hvis postrnummeret ikke eksitserer, opretter den et nyt postnummer og tilføjer Medlemmet, i databasen
                if (controll == false)
                {
                    systemController.RedigerMedlemIDBNytPostnummer(CbMed, navn, eMail, adresse, postNr, checkBetaling, by);
                    MessageBox.Show("Ændringerne er fortaget.");
                }

                // Hvis postnummeret eksisterer i databasen, bliver medlemmets postnummer ændret istedet for oprettet.. 
                else
                {
                    systemController.RedigerMedlemIDBGammeltPostnummer(CbMed, navn, eMail, adresse, postNr, checkBetaling);
                    MessageBox.Show("Ændringerne er fortaget.");
                }

                //bruges til at opdatere Listview og listerne i programmet, efter hvad der står i databasen. 
                lvMedlemmer.Items.Clear();
                systemController.OpdaterPostByFraDB();
                systemController.OpdaterMedlemFraDB();
                OpdaterFormen();
            }

            catch
            {
                OpdaterFormen();
                MessageBox.Show("Fejl opstået");
            }
        }

        public void OpdaterFormen()
        {
            lvMedlemmer.Items.Clear(); // Clear listviewet for at gøre klar til eventuelt nye opdaterede data

            CbMedlemmer.Items.Clear(); // Clear comboboxen for at gøre klar til eventuelt nye opdaterede data

            foreach (var item in systemController.VisMedlemmer())
            {
                if (item.MedlemsNummer != 0) // Gælder ikke admin med medlemsnummer 0
                {
                    CbMedlemmer.Items.Add(item.MedlemsNummer); // Tilføj medlemmers medlemsnummer til comboboxen

                    ListViewItem lvi = new ListViewItem(); // Instansiere listviewet
                    lvi.SubItems[0].Text = item.MedlemsNummer.ToString();
                    lvi.SubItems.Add(item.Navn);
                    lvi.SubItems.Add(item.Mail);
                    lvi.SubItems.Add(item.PostNummer.ToString());
                    lvi.SubItems.Add(item.By);
                    lvi.SubItems.Add(item.Adresse);
                    lvi.SubItems.Add(item.Betalt.ToString());
                    lvi.Tag = item.MedlemsNummer;
                    lvMedlemmer.Items.Add(lvi); // Adderer subitems til listviewet
                }
            }

            CbMedlemmer.SelectedIndex = 0; // Vis det førse medlem i comboboxen
        }

        private void btnTilbage_Click(object sender, EventArgs e)
        {
            this.Close(); // Lukker formen
        }


    }
}
